package org.pi.common.matrix

import scala.collection.mutable.ArrayBuffer

import scala.collection.mutable.GenericArray
import org.pi.common.matrix.range.IntRange
import org.pi.common.matrix.indices.DefaultMultidimensionalIndices
import org.pi.common.matrix.indices.MultidimensionalIndices


/** A Matrix base class 
 **/

trait Matrix[T] extends scala.collection.immutable.IndexedSeq[T] {

	def apply(d1: Int) : T
	def apply(d1: Int, d2: Int) : T 
	def apply(d1: Int, d2: Int, d3: Int) : T 
  
	def update(d1: Int, value: T)
	def update(d1: Int, d2: Int, value: T)
	def update(d1: Int, d2: Int, d3: Int, value: T)
	
	def length() : Int
	def length(d: Int) : Int
	def shape(): Seq[Int]

}
